Защита эндпоинтов базовой аутентификацией со списками разрешенных и заблокированных пользователей
Обеспечить разграничение прав доступа к служебным интерфейсам управления и партнерским API, размещенным в публичной облачной инфраструктуре
Задача
Необходимо исключить неавторизованные сетевые запросы на внешнем периметре шлюза, а также реализовать селективный доступ на базе стандартного протокола HTTP Basic Authentication с поддержкой списков разрешенных учетных записей (allowlist) и оперативной блокировки скомпрометированных пользователей (denylist)
Решение
Пользовательские запросы поступают на Evolution API Gateway и содержат авторизационный заголовок Authorization: Basic <credentials>. Шлюз осуществляет синтаксическую валидацию данных и проверяет наличие учетной записи в корпоративной базе шлюза.

Бизнес-цель
Обеспечить разграничение прав доступа к служебным интерфейсам управления и партнерским API, размещенным в публичной облачной инфраструктуре. Необходимо исключить неавторизованные сетевые запросы на внешнем периметре шлюза, а также реализовать селективный доступ на базе стандартного протокола HTTP Basic Authentication с поддержкой списков разрешенных учетных записей (allowlist) и оперативной блокировки скомпрометированных пользователей (denylist).
Архитектура решения
Пользовательские запросы поступают на Evolution API Gateway и содержат авторизационный заголовок Authorization: Basic <credentials>. Шлюз осуществляет синтаксическую валидацию данных и проверяет наличие учетной записи в корпоративной базе шлюза. Запросы без заголовка отклоняются с кодом 401 Unauthorized. При успешной проверке пароля проверяется членство в списках: учетные записи из черного списка блокируются со статусом 403 Forbidden, а запросы пользователей из белого списка пропускаются к целевому приложению.
Идентификатор пользователя | Наличие в реестре | Статус в политике списков | Результат шлюза |
Анонимный запрос | Нет | Не применимо | 401 Unauthorized [cite: 2] |
audit_operator | Да (валидный пароль) | Включен в Denylist | 403 Forbidden [cite: 7] |
fintech_client | Да (валидный пароль) | Включен в Allowlist | 200 OK (передача бэкенду) |
Необходимые ресурсы
Развернутое приложение в Container Apps, выполняющее роль защищаемого сервиса.
Сервис Evolution API Gateway.
Утилита curl с поддержкой передачи авторизационных параметров.
Пошаговое выполнение
Шаг 1. Развертывание защищаемого сервиса в Container Apps
1. Создайте контейнерное приложение с названием finance-service.
2. Настройте выдачу ответа по пути /transactions:
3. Включите публичный эндпоинт и сохраните предоставленный URL сервиса.
Шаг 2. Конфигурирование базовой аутентификации и списков доступа на шлюзе
1. В консоли API Gateway создайте шлюз gw-security-demo с шаблоном Обратный прокси.
2. Создайте целевой бэкенд, указав адрес контейнера finance-service.
3. Создайте правило маршрутизации:
Путь: /transactions.
HTTP-метод: GET.
Целевой узел: finance-service.
4. В блоке Политики безопасности (Security Policies) активируйте модуль Basic Auth7:
Создайте пользователя №1: Логин fintech_client, Пароль SecretPass#2024!.
Создайте пользователя №2: Логин audit_operator, Пароль AuditKey#2024!.
5. Настройте правила списков пользователей (User Access Lists):
Включите ограничение пользователей по спискам.
Добавьте учетную запись audit_operator в Черный список (Denylist).
Добавьте учетную запись fintech_client в Белый список (Allowlist).
6. Опубликуйте обновленные правила.
Проверка корректности работы
1. Попытка неавторизованного обращения к API без предоставления учетных данных:
Ответ подтверждает блокировку на сетевом периметре:
2. Обращение от имени пользователя, внесенного в черный список:
Ответ шлюза:
3. Выполнение запроса доверенным пользователем из белого списка:
Ответ подтверждает беспрепятственный пропуск трафика к бэкенду:
Использование механизма базовой аутентификации на шлюзе полностью избавляет код микросервиса от необходимости разбора заголовков и хранения статических учетных записей.
P.S. Механизм Basic Auth со списками доступа является идеальным решением для изоляции внутренних контуров и технического периметра. Для высоконагруженных промышленных API этот же шлюзовой узел позволяет бесшовно перейти на бессерверную валидацию токенов Cloud IAM или авторизацию через корпоративный IdP компании (Keycloak/SSO) без переписывания бэкенд-сервисов.